home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / DCLAP 6d / dclap6d / DClap / DUtil.cpp < prev    next >
Text File  |  1996-07-05  |  7KB  |  301 lines

  1. // DUtil.cp
  2. // d.g.gilbert
  3.  
  4. // Add these general graphics objects ???
  5.  
  6. // DFont == enclose an Nlm_FonT item.  
  7. // Include     ParseFont method: Nlm_FonT itsfont = Nlm_ParseFont ("Times,12");
  8. // set a few global defaults, and let user make other DFont objects as needed.
  9.  
  10. // DDraw == some drawing primitives...
  11. // InsetRect/OffsetRect/...
  12.  
  13.  
  14. #include <ncbi.h>
  15. #include <dgg.h>
  16.  
  17. #include "DUtil.h"
  18. #include "DFile.h"
  19. #include "DWindow.h"
  20. #include "DTaskCentral.h"
  21. #include "DViewCentral.h"
  22.  
  23.   
  24. DCursor*    gCursor = NULL;
  25. DMouse*        gMouse = NULL;
  26. DKeys*        gKeys = NULL;
  27. DUtil*        gUtil = NULL;
  28. DPrintManager*    gPrintManager = NULL;
  29. DErrorManager*    gErrorManager = NULL;
  30. DPrefManager*        gPrefManager = NULL;
  31.  
  32. Global Nlm_FonT gTextFont       = NULL; //Nlm_programFont; << not initialized at this point.
  33. Global Nlm_FonT gItalicTextFont= NULL;  
  34. Global Nlm_FonT gBoldTextFont  = NULL; 
  35. Global Nlm_FonT gUlineTextFont = NULL; 
  36. Global char         * gTextFontName = NULL;
  37. Global short      gTextFontSize = 12;
  38. Global short        gTextTabStops = 4;
  39.  
  40.  
  41. // change NLM error management, esp for MemNew/MemMore failure on out-of-mem
  42. #if 0
  43.     // void LIBCALL  Nlm_ErrSetOpts (short erract, short errlog)
  44.     // void LIBCALL  Nlm_ErrGetOpts (short * erract, short * errlog)
  45. /* actopt codes */
  46. #define ERR_CONTINUE  1
  47. #define ERR_IGNORE    2
  48. #define ERR_ADVISE    3
  49. #define ERR_ABORT     4
  50. #define ERR_PROMPT    5
  51. #define ERR_TEE       6
  52. /* logopt codes */
  53. #define ERR_LOG_ON    1
  54. #define ERR_LOG_OFF   2
  55.  
  56. typedef struct _ErrDesc {
  57.     int   context;
  58.     int   errcode;
  59.     char  errtext [ERRTEXT_MAX+1];
  60.     char  srcfile [PATH_MAX+1];
  61.     int   srcline;
  62. } ErrDesc, PNTR ErrDescPtr;
  63.  
  64. typedef void (LIBCALLBACK *ErrHookProc) PROTO((const ErrDesc *err));
  65. #endif
  66.  
  67.  
  68. //class DErrorHandler    : public DObject
  69.  
  70. void DErrorManager::TurnOff()     
  71.     Nlm_ErrGetOpts( &fErract, &fErrlog); 
  72.     Nlm_ErrSetOpts(ERR_CONTINUE,ERR_LOG_OFF); 
  73. }
  74.  
  75. void DErrorManager::TurnOn()     
  76.     Nlm_ErrSetOpts( fErract, fErrlog); 
  77. }
  78.  
  79.  
  80. //class DKeys
  81.  
  82. char    DKeys::current()        { return Nlm_currentKey; }
  83. Boolean    DKeys::shift()        { return Nlm_shftKey; }
  84. Boolean    DKeys::control()    { return Nlm_ctrlKey; }
  85. Boolean    DKeys::option()        { return Nlm_optKey; }
  86. Boolean    DKeys::command()    
  87. #ifdef WIN_MAC
  88.     return Nlm_cmmdKey; 
  89. #endif
  90. #ifdef WIN_MSWIN
  91.     return Nlm_ctrlKey; // or alt !!??
  92. #endif
  93. #ifdef WIN_MOTIF
  94.     return Nlm_cmmdKey; 
  95. #endif
  96.     return Nlm_ctrlKey; 
  97. }
  98.  
  99.  
  100. //class DKeyCallback
  101.  
  102. Global DKeyCallback* gKeyHandlerObject = NULL;
  103.  
  104. extern "C" void keyHandlerProc( char c)
  105. {
  106.     if (gKeyHandlerObject) gKeyHandlerObject->ProcessKey(c);
  107. }
  108.  
  109. DKeyCallback::DKeyCallback()
  110. {
  111.     gKeyHandlerObject= this;
  112.      Nlm_KeyboardView(keyHandlerProc); //Nlm_KeyProc key
  113. }
  114.  
  115. DKeyCallback::~DKeyCallback()
  116. {
  117.     if (gKeyHandlerObject == this) gKeyHandlerObject= NULL;
  118. }
  119.   
  120. void DKeyCallback::SetKeyHandler(DKeyCallback* handler)
  121. {
  122.     gKeyHandlerObject= handler;
  123. }
  124.  
  125.  
  126. //class    DPrefManager    : public DObject
  127.  
  128. Local char* kDefaultPrefApp = "DClap";
  129.  
  130. char* DPrefManager::GetAppPref(char* type, char* section, char* appname, char* defaultvalue,
  131.                                                 char* prefvalue, ulong maxsize) 
  132.     if (prefvalue==NULL) prefvalue= (char*)MemNew(maxsize);
  133.     long buflen= Nlm_GetAppParam(appname, section, type, defaultvalue, prefvalue, maxsize);
  134.     return prefvalue;
  135. }
  136.             
  137. char* DPrefManager::GetPref(char* type, char* section, char* defaultvalue,
  138.                                         char* prefvalue, ulong maxsize) 
  139.     return GetAppPref(type, section, kDefaultPrefApp, defaultvalue, prefvalue, maxsize);
  140. }
  141.  
  142. Boolean DPrefManager::SetAppPref(char* prefvalue, char* type, char* section, char* appname) 
  143.     return Nlm_SetAppParam(appname, section, type, prefvalue);
  144. }
  145.  
  146. Boolean DPrefManager::SetPref(char* prefvalue, char* type, char* section) 
  147.     return SetAppPref( prefvalue, type, section, kDefaultPrefApp);
  148. }
  149.  
  150. Boolean DPrefManager::RemovePrefSection(char* section, char* appname) 
  151.     return Nlm_SetAppParam(appname, section, NULL, NULL);
  152. }
  153.  
  154. char* DPrefManager::GetAppPrefSection(char* section, ulong& sectlen, char* appname, char* defaultvalue,
  155.                                             char* prefvalue, ulong maxsize) 
  156.     // NOTE: this reads SECTION TYPE NAMES only, e.g.  
  157.     // [fonts]
  158.     // myfont=times
  159.     // hisfont=courier
  160.     // misfont=symbol
  161.     // --- result is list of "myfont.hisfont.misfont." (null term at end of each name)
  162.     
  163.     if (prefvalue==NULL) prefvalue= (char*)MemNew(maxsize);
  164.     sectlen= Nlm_GetAppParam(appname, section, NULL, defaultvalue, prefvalue, maxsize);
  165.     return prefvalue;
  166. }
  167.             
  168. char* DPrefManager::GetPrefSection(char* section, ulong& sectlen, char* defaultvalue,
  169.                                                 char* prefvalue, ulong maxsize) 
  170.     return GetAppPrefSection(section, sectlen, kDefaultPrefApp, defaultvalue, prefvalue, maxsize);
  171. }
  172.  
  173. char** DPrefManager::GetPrefFileLines(const char* prefFile, short& nlines) 
  174. {
  175.         char** linelist = NULL;
  176.         DFile aFile(prefFile,"r");
  177.         aFile.Open();
  178.          linelist= Dgg_ReadDefaultPrefs( aFile.fFile, &nlines);
  179.         aFile.Close();
  180.          return linelist;
  181. }
  182.  
  183.  
  184.  
  185.  
  186.  
  187. //class    DPrintManager    : public DObject
  188.  
  189. DPrintManager::DPrintManager()
  190. {
  191.     Nlm_LoadRect( &fPageRect, 0,-1,0,-1);
  192. }
  193.  
  194. DWindow* DPrintManager::StartPrinting()
  195. {
  196.     return (DWindow*) Nlm_GetObject((Nlm_GraphiC)Nlm_StartPrinting());
  197. }
  198.  
  199. void DPrintManager::DonePrinting(DWindow* savedWindow)
  200. {
  201.     Nlm_EndPrinting( (Nlm_WindoW)savedWindow->GetNlmObject());
  202. }
  203.  
  204. Boolean DPrintManager::StartPage()
  205. {
  206.     return Nlm_StartPage();
  207. }
  208.  
  209. Boolean DPrintManager::DonePage()
  210. {
  211.     return Nlm_EndPage();
  212. }
  213.  
  214. Boolean DPrintManager::PrintRect(Nlm_RecT& rpt)
  215. {
  216.     return Nlm_PrintingRect(&rpt);
  217. }
  218.  
  219.  
  220. short    DPrintManager::PageWidth(Boolean onScreen)
  221. {
  222.     short        val;
  223.     Boolean okay= !Nlm_EmptyRect( &fPageRect);
  224.     if (!okay) okay= Nlm_PrintingRect( &fPageRect);
  225.     if (okay) {
  226.         val= fPageRect.right - fPageRect.left;
  227.         if (onScreen) val= MIN(val - 140, Nlm_screenRect.right - Nlm_screenRect.left - 40);
  228.         }
  229.     else 
  230.         val= MIN(500, Nlm_screenRect.right - Nlm_screenRect.left - 50);
  231.     return val;
  232. }
  233.  
  234. short    DPrintManager::PageHeight(Boolean onScreen)
  235. {
  236.     short        val;
  237.     Boolean okay= !Nlm_EmptyRect( &fPageRect);
  238.     if (!okay) okay= Nlm_PrintingRect( &fPageRect);
  239.     if (okay) {
  240.         val= fPageRect.bottom - fPageRect.top;
  241.         if (onScreen) val= MIN(val - 100, Nlm_screenRect.bottom - Nlm_screenRect.top - 80);
  242.         }
  243.     else 
  244.         val= MIN(700, Nlm_screenRect.bottom - Nlm_screenRect.top - 80);
  245.     return val;
  246. }
  247.  
  248.  
  249.  
  250. //DClapGlobals    globals; // initializes globals here
  251.  
  252.  
  253.  
  254. DClapGlobals::DClapGlobals()
  255. {
  256.     gCursor = new DCursor();
  257.     gMouse = new DMouse();
  258.     gKeys = new DKeys();
  259.     gUtil = new DUtil();
  260.     gFileManager = new DFileManager();
  261.     gPrintManager = new DPrintManager();
  262.     gErrorManager= new DErrorManager();
  263.     gPrefManager= new DPrefManager();
  264.  
  265.     gWindowManager = new DWindowManager();     // "DWindow.h"
  266.     gTaskCentral= new DTaskCentral();     // DTaskCentral.h
  267.     gViewCentral= new DViewCentral();     // DViewCentral.h
  268.  
  269.     gTextFont       = Nlm_programFont;  
  270.     gItalicTextFont = Nlm_programFont;  
  271.     gBoldTextFont      = Nlm_programFont;  
  272.     gUlineTextFont     = Nlm_programFont;  
  273. }
  274.  
  275.  
  276. DClapGlobals::~DClapGlobals()
  277. {
  278.     delete gViewCentral; //->suicide();  
  279.     delete gTaskCentral; //->suicide();  
  280.     delete gWindowManager; //->suicide();
  281.     delete gErrorManager; //->suicide();
  282.     delete gPrefManager; //->suicide();
  283.     delete gPrintManager; //->suicide();
  284.     delete gFileManager; //->suicide();
  285.     delete gUtil; //->suicide();
  286.     delete gKeys; //->suicide();
  287.     delete gMouse; //->suicide();
  288.     delete gCursor; //->suicide();  
  289. }
  290.  
  291.